/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.modelo;

import br.com.foxinline.enums.AcaoProtesto;
import br.com.foxinline.enums.EspecieProtesto;
import br.com.foxinline.enums.TipoTitulo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

/**
 *
 * @author roniere
 */
@Entity
public class Protesto implements Serializable {

    @Id
    @SequenceGenerator(name = "seq_protesto", sequenceName = "seq_protesto")
    @GeneratedValue(generator = "seq_protesto", strategy = GenerationType.SEQUENCE)
    private Long id;
    
    @NotNull
    @OneToOne
    private Protocolo protocolo;
    
    @NotNull
    @OneToOne
    private ProtocoloItem protocoloItem;
    
    private String codigoProtocolo;
    
    @NotNull
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataProtesto;
    
    @NotNull
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date vencimentoTitulo;
    
    @NotNull
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataEmissaoTitulo;
    
    /**
     * Prática do Ato
     */
    @NotNull
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataAcao;
   
    
    @ManyToOne
    private Pessoa apresentante;
    
    @JoinTable(name = "protesto_devedor", joinColumns = {
        @JoinColumn(name = "protesto_id")}, inverseJoinColumns = {
        @JoinColumn(name = "pessoa_id")}, uniqueConstraints = {
        @UniqueConstraint(columnNames = {
            "protesto_id",
            "pessoa_id"})})
    @ManyToMany
    private List<Pessoa> devedor;
    
    @JoinTable(name = "protesto_avalista", joinColumns = {
        @JoinColumn(name = "protesto_id")}, inverseJoinColumns = {
        @JoinColumn(name = "pessoa_id")}, uniqueConstraints = {
        @UniqueConstraint(columnNames = {
            "protesto_id",
            "pessoa_id"})})
    @ManyToMany
    private List<Pessoa> avalistas;
    
    @NotNull
    @Enumerated(EnumType.STRING)
    private AcaoProtesto acaoProtesto;
    
    @NotNull
    @Enumerated(EnumType.STRING)
    private EspecieProtesto especieProtesto;
    
    @Enumerated(EnumType.STRING)
    private TipoTitulo tipoTitulo;
    
    @NotNull
    @ManyToOne
    private EspecieTitulo especieTitulo;
    
    private String numeroTitulo;
    
    private BigDecimal valorTitulo;
    
    private BigDecimal valorAProtestar;
    
    private String complemento;
    
    private String pracaPagamento;

    public String getPracaPagamento() {
        return pracaPagamento;
    }

    public void setPracaPagamento(String pracaPagamento) {
        this.pracaPagamento = pracaPagamento;
    }
    
    
    
    public TipoTitulo getTipoTitulo() {
        return tipoTitulo;
    }

    public void setTipoTitulo(TipoTitulo tipoTitulo) {
        this.tipoTitulo = tipoTitulo;
    }

    
    public List<Pessoa> getAvalistas() {
        return avalistas;
    }

    public void setAvalistas(List<Pessoa> avalistas) {
        this.avalistas = avalistas;
    }

    
    public String getNumeroTitulo() {
        return numeroTitulo;
    }

    public void setNumeroTitulo(String numeroTitulo) {
        this.numeroTitulo = numeroTitulo;
    }

    public BigDecimal getValorAProtestar() {
        return valorAProtestar;
    }

    public void setValorAProtestar(BigDecimal valorAProtestar) {
        this.valorAProtestar = valorAProtestar;
    }

    public BigDecimal getValorTitulo() {
        return valorTitulo;
    }

    public void setValorTitulo(BigDecimal valorTitulo) {
        this.valorTitulo = valorTitulo;
    }

    
    public AcaoProtesto getAcaoProtesto() {
        return acaoProtesto;
    }

    public void setAcaoProtesto(AcaoProtesto acaoProtesto) {
        this.acaoProtesto = acaoProtesto;
    }

    public Pessoa getApresentante() {
        return apresentante;
    }

    public void setApresentante(Pessoa apresentante) {
        this.apresentante = apresentante;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public Date getDataAcao() {
        return dataAcao;
    }

    public void setDataAcao(Date dataAcao) {
        this.dataAcao = dataAcao;
    }

    public Date getDataEmissaoTitulo() {
        return dataEmissaoTitulo;
    }

    public void setDataEmissaoTitulo(Date dataEmissaoTitulo) {
        this.dataEmissaoTitulo = dataEmissaoTitulo;
    }

    public Date getDataProtesto() {
        return dataProtesto;
    }

    public void setDataProtesto(Date dataProtesto) {
        this.dataProtesto = dataProtesto;
    }

    public List<Pessoa> getDevedor() {
        return devedor;
    }

    public void setDevedor(List<Pessoa> devedor) {
        this.devedor = devedor;
    }

   

    public EspecieProtesto getEspecieProtesto() {
        return especieProtesto;
    }

    public void setEspecieProtesto(EspecieProtesto especieProtesto) {
        this.especieProtesto = especieProtesto;
    }

    public EspecieTitulo getEspecieTitulo() {
        return especieTitulo;
    }

    public void setEspecieTitulo(EspecieTitulo especieTitulo) {
        this.especieTitulo = especieTitulo;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Protocolo getProtocolo() {
        return protocolo;
    }

    public void setProtocolo(Protocolo protocolo) {
        this.protocolo = protocolo;
    }

    public Date getVencimentoTitulo() {
        return vencimentoTitulo;
    }

    public void setVencimentoTitulo(Date vencimentoTitulo) {
        this.vencimentoTitulo = vencimentoTitulo;
    }

    public ProtocoloItem getProtocoloItem() {
        return protocoloItem;
    }

    public void setProtocoloItem(ProtocoloItem protocoloItem) {
        this.protocoloItem = protocoloItem;
    }

    public String getCodigoProtocolo() {
        return codigoProtocolo;
    }

    public void setCodigoProtocolo(String codigoProtocolo) {
        this.codigoProtocolo = codigoProtocolo;
    }
    
    

    @Override
    public String toString() {
        return "Protesto{" + "id=" + id + ", protocolo=" + protocolo + ", protocoloItem=" + protocoloItem + ", dataProtesto=" + dataProtesto + ", vencimentoTitulo=" + vencimentoTitulo + ", dataEmissaoTitulo=" + dataEmissaoTitulo + ", dataAcao=" + dataAcao + ", apresentante=" + apresentante + ", devedor=" + devedor + ", acaoProtesto=" + acaoProtesto + ", especieProtesto=" + especieProtesto + ", especieTitulo=" + especieTitulo + ", numeroTitulo=" + numeroTitulo + ", valorTitulo=" + valorTitulo + ", valorAProtestar=" + valorAProtestar + ", complemento=" + complemento + '}';
    }
    
    
    
}
